# @Time    :2025/4/6 21:04
"""
练习题 2：迭代器
编写一个类MyList，使其成为一个可迭代对象，该类包含一个列表数据data，
并实现__iter__和__next__方法，使得可以通过for循环遍历data列表中的元素。
使用你定义的MyList类，创建一个实例并通过for循环打印其中的元素。
"""
"""
Python 的迭代器协议要求实现两个方法：
__iter__：返回迭代器对象（通常返回 self）。
__next__：返回下一个元素，如果没有更多元素，则抛出 StopIteration 异常。
"""

class MyList:
    def __init__(self, data):
        self.data = data  # 列表 ，需要迭代的数据
        self.index = 0  # 计数器，跟踪当前迭代的位置

    def __iter__(self):#迭代器协议
        return self
        #如果你希望支持多次迭代，可以在 __iter__ 方法中返回一个新的迭代器对象。
        # # 每次调用 iter() 时返回一个新的迭代器
        # return MyListIterator(self.data)

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index]#返回当前索引对应的元素
        self.index += 1 #将索引递增
        return result


my_list = MyList([10, 20, 30])
for ele in my_list:
    print(ele)
